home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)zl.d64 / lst.dem'heapsort < prev    next >
Text File  |  2007-03-01  |  1KB  |  65 lines

  1. 1000 //
  2. 1010 //
  3. 1020 //
  4. 1030 //    HEAPSORT - A FAST ROUTINE FOR SORTING REAL NUMBERS
  5. 1040 //
  6. 1050 //
  7. 1060 //
  8. 1070 //
  9. 1080 //
  10. 1090 ╨╥╧├ HEAP'SORT(╥┼╞ IN'DATA(),NUM'VALUES) ├╠╧╙┼─
  11. 1100   FIRST:=╔╬╘((.5*NUM'VALUES)+1)
  12. 1110   FINISH:=NUM'VALUES
  13. 1120   ╥┼╨┼┴╘ 
  14. 1130     ╔╞ FIRST>1 ╘╚┼╬
  15. 1140       FIRST:=FIRST-1
  16. 1150       TEMP:=IN'DATA(FIRST)
  17. 1160     ┼╠╔╞ FIRST=1 ╘╚┼╬
  18. 1170       TEMP:=IN'DATA(FINISH)
  19. 1180       IN'DATA(FINISH):=IN'DATA(1)
  20. 1190       FINISH:=FINISH-1
  21. 1200     ┼╬─╔╞ 
  22. 1210     ╔╞ FINISH<>1 ╘╚┼╬
  23. 1220       J:=FIRST
  24. 1230       ╥┼╨┼┴╘ 
  25. 1240         I:=J
  26. 1250         J:=2*J
  27. 1260         ╔╞ J<FINISH ┴╬─ ╘╚┼╬ IN'DATA(J)<IN'DATA(J+1) ╘╚┼╬
  28. 1270           J:=J+1
  29. 1280         ┼╬─╔╞ 
  30. 1290         MULTI'EXIT:=╞┴╠╙┼
  31. 1300         ╔╞ J>FINISH ╘╚┼╬
  32. 1310           MULTI'EXIT:=╘╥╒┼
  33. 1320         ┼╠╔╞ TEMP>=IN'DATA(J) ╘╚┼╬
  34. 1330           MULTI'EXIT:=╘╥╒┼
  35. 1340         ┼╬─╔╞ 
  36. 1350         ╔╞ ╬╧╘ MULTI'EXIT ╘╚┼╬ IN'DATA(I):=IN'DATA(J)
  37. 1360       ╒╬╘╔╠ MULTI'EXIT
  38. 1370       IN'DATA(I):=TEMP
  39. 1380     ┼╠╙┼ 
  40. 1390       // FINISH = 1
  41. 1400       IN'DATA(1):=TEMP
  42. 1410     ┼╬─╔╞ 
  43. 1420   ╒╬╘╔╠ FINISH=1
  44. 1430 ┼╬─╨╥╧├ HEAP'SORT
  45. 1440 //
  46. 1450 //
  47. 1460 //
  48. 1470 //
  49. 1480 //
  50. 1490 //   DEMONSTRATION DATA SET
  51. 1500 //
  52. 1510 //
  53. 1520 //
  54. 1530 //
  55. 1540 //
  56. 1550 ─╔═ A(200)
  57. 1560 ╞╧╥ I:=1 ╘╧ 200 ─╧
  58. 1570   A(I):=╥╬─(1,1000)
  59. 1580 ┼╬─╞╧╥ I
  60. 1590 HEAP'SORT(A(),200)
  61. 1600 ╞╧╥ I:=1 ╘╧ 200 ─╧
  62. 1610   ╨╥╔╬╘ A(I)
  63. 1620 ┼╬─╞╧╥ I
  64. 1630 ┼╬─ 
  65.